package org.DateFile;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

import org.junit.Test;

/**
 * @program: jdbc-demo
 * @description: 采集测试类
 * @author: rendc
 * @create: 2025-09-03 11:14
 **/
public class cx {

    @Test
    public void gather() throws Exception {
        // 准备文件
        // String filePath = "src/main/resources/data-file-simple";
        String filePath = "src/main/resources/data-file";
        // File file = new File(filePath);
        // 准备io流 读取文件内容
        BufferedReader br = new BufferedReader(new FileReader(filePath));
        // 逐行读取
        String str = null;
        while ((str = br.readLine()) != null) {
            // System.out.println(str);
            // 按字段拆分 | 提取有效信息
            String[] arr = str.split("[|]");
            // 区分传感器类型
            switch (arr[3]) {
                case "16":
                    // System.out.println("温湿度");
                    // 数据换算
                    // 表示温度和湿度数据。当数据为温度和湿度时，环境数据arr[6]（例:5d806ff802）的前两个字节表示温度(即前4位数,例:5d80)中间的两个字节表示湿度(即中间的4位数，例:6ff8)
                    String temperature = arr[6].substring(0, 4);
                    // System.out.println(temperature);
                    // 转化为实际数据
                    // 实际温度(data*(0.00268127F))-46.85F
                    int temperatureInt = Integer.parseInt(temperature, 16);
                    // 最终温度
                    System.out.print("实际温度：");
                    System.out.println((temperatureInt * (0.00268127F)) - 46.85F);
                    String humidity = arr[6].substring(4, 8);
                    int humidityInt = Integer.parseInt(humidity, 16);
                    // System.out.println(humidity);
                    System.out.print("实际湿度：");
                    System.out.println((temperatureInt * 0.00190735F) - 6);
                    break;
                case "256":
                    System.out.print("光照强度：");
                    // 数据换算
                    System.out.println(Integer.parseInt(arr[6].substring(0, 4), 16));
                    break;
                case "1280":
                    System.out.print("二氧化碳浓度：");
                    // 数据换算
                    System.out.println(Integer.parseInt(arr[6].substring(0, 4), 16));
                    break;
                default:
                    System.out.println("数据格式有误，请排查是否是新设备：\n" + str);
                    break;
            }
        }
    }
}